//用递归方法求解n皇后问题//
#include<stdio.h>
#include <stdlib.h>
const int N = 20;
int q[N];
int count = 0;
void print(int n)
{
    count++;
    int i;
    printf("第%d个解：",count);
    for (i=1;i<=n;i++)
        printf("(%d,%d)",i,q[i]);
    printf("\n");
}
bool place(int k,int j)
{
    int i = 1;
    while (i<k)
    {
        if ((q[i]==j)||(abs(q[i]-j) == abs(i-k)))
            return false;
        i++;
    }
    return true;
}
void queen(int k,int n)
{
    int j;
    if (k>n)
        print(n);
    else
        for(j=1;j<=n;j++)
            if(place(k,j))
            {
                q[k]=j;
                queen(k+1,n);
            }
}


int main()
{
    int n;
    printf("皇后问题(n<20) n:");
    scanf("%d",&n);
    if (n>20)
        printf("n值太大，不能求解\n");
    else
    {
        printf("%d皇后问题求解如下:\n",n);
        queen(1,n);
        printf("\n");
    }
    return 1;
}